package com.saver.view;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.github.mikephil.charting.utils.Utils;
import com.saver.R;
import com.saver.core.persistence.TransaccionViewSQLite;
import com.saver.core.processor.util.Util;
import com.saver.core.util.CommonUtil;
import com.saver.core.util.Constantes;
import com.saver.view.dialog.EditTransactionDialog;
import com.saver.view.dialog.RefreshActivity;
import com.saver.view.gui.CircleView;
import com.saver.view.gui.FragmentSupport;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.List;

public class ListDetailActivity extends Activity implements OnItemClickListener, RefreshActivity {

    private static final String TAG = "ListDetailActivity";

    private List<TransaccionView> listaTransaccion = new ArrayList<TransaccionView>();

    TransaccionViewSQLite transaccionViewSQLite;
    String idCategoria;
    Integer tipoConsulta;
    Integer anio;
    Integer mes;
    Integer dia;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        iniciar();
    }

    private void iniciar() {
        transaccionViewSQLite = new TransaccionViewSQLite(this);

        idCategoria = (String) getIntent().getExtras().get("idCategoria");
        tipoConsulta = getIntent().getExtras().getInt(Constantes.VAR_TIPO_CONSULTA);

        if (Constantes.CONSULTA_X_ANIO == tipoConsulta) {
            anio = getIntent().getExtras().getInt(Constantes.VAR_ANIO);
            listaTransaccion = transaccionViewSQLite.listarTransaccionesXCategoria(Integer.parseInt(idCategoria), anio);
        } else if (Constantes.CONSULTA_X_MES == tipoConsulta) {
            anio = getIntent().getExtras().getInt(Constantes.VAR_ANIO);
            mes = getIntent().getExtras().getInt(Constantes.VAR_MES);
            listaTransaccion = transaccionViewSQLite.listarTransaccionesXCategoria(Integer.parseInt(idCategoria), anio, mes);
        } else if (Constantes.CONSULTA_X_DIA == tipoConsulta) {
            anio = getIntent().getExtras().getInt(Constantes.VAR_ANIO);
            mes = getIntent().getExtras().getInt(Constantes.VAR_MES);
            dia = getIntent().getExtras().getInt(Constantes.VAR_DIA);
            listaTransaccion = transaccionViewSQLite.listarTransaccionesXCategoria(Integer.parseInt(idCategoria), anio, mes, dia);
        } else if (Constantes.CONSULTA_X_REVISAR == tipoConsulta) {
            listaTransaccion = transaccionViewSQLite.listarTransaccionesXRevisar();
        }

        //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_detail_list);

        // initialize the utilities
        Utils.init(getResources());

        ArrayList<ContentItem> objects = new ArrayList<ContentItem>();
        DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);

        for (TransaccionView transaccion : listaTransaccion) {
            String fecha = df.format(transaccion.getFechaTransaccion());
            //obtiene el nombre del establecimiento o de la categoria Para mostrarlo en el campo REFERENCIA
            String detalle = transaccion.getReferencia();
            if (Util.esVacio(detalle)) {
                detalle = transaccion.getNombreEstablecimiento();
                if (Util.esVacio(detalle)) {
                    detalle = transaccion.getNombreCategoriaEquiv();
                }
            }
            Log.d(TAG, transaccion.getNombreEstablecimiento()
                    + " --  nce: " + transaccion.getNombreCategoriaEquiv()
                    + " --  ce: " + transaccion.getNombreCategoria()
                    + " --  ie: " + transaccion.getIdEstablecimiento()
                    + " --  iee: " + transaccion.getIdEstablecimientoEquiv()
                    + " --  ft" + transaccion.getFechaText());
            objects.add(new ContentItem(transaccion.getId(), transaccion.getNombreCategoria() + " ",
                    CommonUtil.formatCurrency(transaccion.getMonto()), fecha, detalle, transaccion.getIcono(), transaccion.getColor()));
        }

        MyAdapter adapter = new MyAdapter(this, objects);

        ListView lv = (ListView) findViewById(R.id.listViewDetail);
        lv.setAdapter(adapter);

        lv.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int arg2, long arg3) {
        Log.d(TAG, "onItemClick");
        ViewHolder viewHolder = (ViewHolder) view.getTag();
        Integer idTransaccion = viewHolder.idTtransaccion;
        FragmentManager manager = getFragmentManager();
        EditTransactionDialog dialog = new EditTransactionDialog();
        dialog.setParent(this);
        dialog.setTransaccionID(idTransaccion);
        dialog.show(manager, null);
    }

    @Override
	protected void onResume() {
		super.onResume();
    	Log.d(TAG, "onResume");
	}

	@Override
    public void refresh(Object params) {
    	Log.d(TAG, "refresh");
        iniciar();
    }

    @Override
	protected void onStart() {
		super.onStart();
    	Log.d(TAG, "onStart");
	}

	@Override
	protected void onRestart() {
    	Log.d(TAG, "onRestart");
		super.onRestart();
	}

	@Override
	protected void onPostResume() {
    	Log.d(TAG, "onPostResume");
		super.onPostResume();
	}

	@Override
	public boolean onSearchRequested() {
    	Log.d(TAG, "onSearchRequested");
		return super.onSearchRequested();
	}

	@Override
    public void reemplazarFragmento(FragmentSupport fragment) {

    }

    @Override
    public void selectedIndex(int position) {

    }

    private class ContentItem {
        Integer idTtransaccion;
        String nombreCategoria;
        String monto;
        String fecha;
        String nombreEstablecimiento;
        String icono;
        String color;

        public ContentItem(Integer it, String n, String m, String f, String e, String i, String c) {
            idTtransaccion = it;
            nombreCategoria = n;
            monto = m;
            fecha = f;
            nombreEstablecimiento = e;
            icono = i;
            color = c;
        }
    }

    private class MyAdapter extends ArrayAdapter<ContentItem> {

        public MyAdapter(Context context, List<ContentItem> objects) {
            super(context, 0, objects);
        }

        @Override
        @SuppressLint("InflateParams")
        public View getView(int position, View convertView, ViewGroup parent) {
            ContentItem c = getItem(position);

            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_detail, null);
                holder.nombreCategoria = (TextView) convertView.findViewById(R.id.nombre_categoria);
                holder.nombreEstablecimiento = (TextView) convertView.findViewById(R.id.nombre_establecimiento);
                holder.monto = (TextView) convertView.findViewById(R.id.monto);
                holder.fecha = (TextView) convertView.findViewById(R.id.fecha);
                holder.icono = (CircleView) convertView.findViewById(R.id.icon_category);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            String texto;
            holder.idTtransaccion = c.idTtransaccion;
            holder.nombreCategoria.setText(c.nombreCategoria.trim().toUpperCase());
            holder.nombreEstablecimiento.setText((texto = c.nombreEstablecimiento) == null ? "" : texto.trim().toUpperCase());
            holder.monto.setText(c.monto);
            holder.fecha.setText(c.fecha);

            String[] rgb = c.color.split(",");
            int color = Color.rgb(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]), Integer.parseInt(rgb[2]));
            holder.icono.setTitleText(c.nombreCategoria.substring(0, 1).toUpperCase());
            holder.icono.setStrokeColor(color);
            holder.icono.setTitleColor(color);
            holder.icono.setFillColor(color & 0x60FFFFFF);

            return convertView;
        }
    }

    private class ViewHolder {
        Integer idTtransaccion;
        TextView nombreCategoria, monto, fecha, nombreEstablecimiento;
        CircleView icono;
    }

//    @Override
//    public boolean onCreateOptionsMenu(Menu menu) {
//        MenuInflater inflater = getMenuInflater();
//        inflater.inflate(R.menu.listdetail, menu);
//        return super.onCreateOptionsMenu(menu);
//    }
}
